import uuid
from django.db import models

"""
Django 数据库迁移命令: 
python manage.py makemigrations
python manage.py migrate
.venv\Scripts\activate
"""

# 用户系统
class User(models.Model):
    uid = models.CharField(max_length=255, primary_key=True)
    username = models.CharField(max_length=255, verbose_name="用户名")
    account = models.CharField(max_length=255, verbose_name="账号")
    # 积分
    points = models.IntegerField(default=0, verbose_name="积分", null=True, blank=True)

    class Meta:
        db_table = "user"
        verbose_name = "用户"
        verbose_name_plural = "用户"


# 任务模型表
"""
- 用户ID(外键关联用户表)    
- 任务ID
- 任务名称
- 任务描述
- 任务状态(1. 未开始 2. 进行中 3. 已完成 4. 已取消)
- 任务积分
- 任务开始时间
- 任务完成时间
- 任务创建时间
- 任务更新时间
"""
class Task(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name="用户")
    tid = models.UUIDField( primary_key=True, default=uuid.uuid4, editable=False)
    name = models.CharField(max_length=255, verbose_name="任务名称")
    description = models.TextField(verbose_name="任务描述")
    status = models.IntegerField(default=1, verbose_name="任务状态", choices=[(1, "未开始"), (2, "进行中"), (3, "已完成"), (4, "已取消")])
    points = models.IntegerField(default=0, verbose_name="任务积分")
    start_time = models.DateTimeField(null=True, blank=True, verbose_name="任务开始时间")
    end_time = models.DateTimeField(null=True, blank=True, verbose_name="任务完成时间")
    create_time = models.DateTimeField(auto_now_add=True, verbose_name="任务创建时间")
    update_time = models.DateTimeField(auto_now=True, verbose_name="任务更新时间")


    class Meta:
        db_table = "task"
        verbose_name = "任务"
        verbose_name_plural = "任务"


# 商品表
"""
- 商品ID
- 商品名称
- 商品描述
- 商品积分
- 商品已售
- 商品库存
- 商品封面图URL
- 发货方式描述
- 商品创建时间
- 商品更新时间
"""
class Product(models.Model):
    pid = models.UUIDField( primary_key=True, default=uuid.uuid4, editable=False)
    name = models.CharField(max_length=255, verbose_name="商品名称")
    description = models.TextField(verbose_name="商品描述")
    points = models.IntegerField(default=0, verbose_name="商品积分")
    sold = models.IntegerField(default=0, verbose_name="商品已售")
    stock = models.IntegerField(default=0, verbose_name="商品库存")
    cover_url = models.TextField(verbose_name="商品封面图URL")
    delivery_method = models.TextField(verbose_name="发货方式描述")
    create_time = models.DateTimeField(auto_now_add=True, verbose_name="商品创建时间")
    update_time = models.DateTimeField(auto_now=True, verbose_name="商品更新时间")

    class Meta:
        db_table = "product"
        verbose_name = "商品"
        verbose_name_plural = "商品"


# 订单表
"""
- 订单ID
- 用户ID(外键关联用户表)
- 商品ID(外键关联商品表)
- 订单积分
- 订单状态(1. 待支付 2. 已支付 3. 已发货 4. 已完成 5. 已取消)
- 订单创建时间
- 订单更新时间
"""
class Order(models.Model):
    oid = models.UUIDField( primary_key=True, default=uuid.uuid4, editable=False)
    user = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name="用户")
    product = models.ForeignKey(Product, on_delete=models.CASCADE, verbose_name="商品")
    points = models.IntegerField(default=0, verbose_name="订单积分")
    status = models.IntegerField(default=1, verbose_name="订单状态", choices=[(1, "待支付"), (2, "已支付"), (3, "已发货"), (4, "已完成"), (5, "已取消")])
    create_time = models.DateTimeField(auto_now_add=True, verbose_name="订单创建时间")
    update_time = models.DateTimeField(auto_now=True, verbose_name="订单更新时间")

    class Meta:
        db_table = "order"
        verbose_name = "订单"
        verbose_name_plural = "订单"